home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1998 November: Tool Chest / Dev.CD Nov 98 TC.toast / What's New? / Development Kits / USBDDK_v1.0.1_updated / Examples / USBSampleStorageDriver / SampleStorageDriver.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-09-29  |  4.3 KB  |  168 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        StorageClassDriver.h
  3.  
  4.     Contains:    xxx put contents here xxx
  5.  
  6.     Version:    xxx put version here xxx
  7.  
  8.     Copyright:    © 1998 by Apple Computer, Inc., all rights reserved.
  9.  
  10. */
  11.  
  12.  
  13. #ifndef __STORAGECLASSDRIVERH__
  14. #define __STORAGECLASSDRIVERH__
  15.  
  16. #include <USB.h>
  17. #include "SampleStorageDriverAPI.h"
  18.  
  19.  
  20. void DriverEntry(USBDeviceRef device, USBDeviceDescriptorPtr pDesc);
  21. void ExpertNotify(void *exNote);
  22.  
  23.  
  24. #if DEBUG
  25. #define IF_DEBUG(x)    x
  26. #else
  27. #define IF_DEBUG(x)
  28. #endif
  29.  
  30. #define kStrStorageClass    "\pStorageClass: "
  31.  
  32. #define kStorageRetryCount    5
  33. #define kMaxTransitions        1
  34. #define kIntDataSize        8
  35. #define kStatusSize            2        // USB Status
  36.  
  37. // I/O retry counts
  38. #define kMaxReadRetries                0
  39. #define kMaxWriteRetries            0
  40. #define kMaxDiagRetries                0
  41.  
  42. typedef CALLBACK_API_C( void , RWCompletion )(USBPB *pb);
  43.  
  44. // These states are used by StorageDeviceInitiateConfiguration
  45. enum driverConfigStates
  46. {
  47.     kUndefined =                0,
  48.     
  49.     kSetConfig,
  50.     kGetFullConfiguration0,
  51.     kGetFullConfiguration1,
  52.     kFindStorageInterface,
  53.     kStorageConfigureInterface,
  54.     
  55.     kNewInterfaceRef,
  56.     kStorageFindInterruptPipe,
  57.     kStorageFindBulkInPipe,
  58.     kStorageFindBulkOutPipe,
  59.     kStorageReadInterrupt,
  60.     
  61.     kStorageBulkRead,
  62.     kStorageBulkWrite,
  63.     kStorageInitiateBulkRead,                // Begin a bulk read transaction
  64.     kStorageBulkIOComplete,                    // Complete the bulk read
  65.     kStorageInitiateBulkWrite,                // Begin a bulk write transaction
  66.     
  67.     kStorageBulkWriteComplete,                // Complete the bulk write
  68.     kStorageExecuteCommand,                    // Begin execution of user command
  69.     kStorageExecuteCommandCompletion,        // Complete the user command
  70.     kStorageGetStatus,                        // Complete the GetStatus request
  71.     kStorageGetStatusBulkRead,                // Get the status data
  72.     
  73.     kStorageReadFirmwareVersion,            // Read the firmware version of the device
  74.     kUSBDelay,
  75.     
  76.     kNilCompletion,
  77.     
  78.     kReturnFromDriver =         0x1000,
  79.     kRetryTransaction =         0x2000,
  80.     kAsyncTransaction =         0x4000,
  81.     kCompletionPending =         0x8000
  82. };
  83.  
  84. // Structure for the global PB's
  85. struct StorageClassTransactionPB {
  86.     USBPB                usbPB;
  87.     UInt8                cdb[kCDBSize];
  88.     Ptr                    bufferPtr;
  89.     UInt32                expectedByteCount;
  90.     UInt32                actualByteCount;
  91.     UInt32                bytesLeftToTransfer;
  92.     UInt32                currentState;
  93.     Boolean                busy;
  94.     SInt32                retryCount;
  95.     UInt32                flags;                // Flags from StorageClassRequest pb
  96.     StorageBlockRWPBPtr    userPBPtr;
  97.     RWCompletion        completionProc;
  98. };
  99. typedef struct StorageClassTransactionPB    StorageClassTransactionPB;
  100. typedef    StorageClassTransactionPB             *StorageClassTransactionPBPtr;
  101.  
  102.  
  103. struct StorageClassInfo {
  104.     USBPB                             usbPB;                    // Configuration block
  105.     
  106.     // Device info
  107.     UInt8                            firmwareVersion[2];
  108.     
  109.     // Interrupt pipe
  110.     USBPipeRef                         interruptPipeRef;        // USB pipe reference
  111.     UInt8                            interruptReport[kIntDataSize];
  112.     
  113.     //    mandatory bulk in pipe
  114.     USBPipeRef                         readPipeRef;            // USB pipe reference
  115.     
  116.     //    mandatory bulk out pipe
  117.     USBPipeRef                         writePipeRef;            // USB pipe reference
  118.  
  119.     //    device: configuration and interface details
  120.     USBDeviceRef                    interfaceRef;            // USB device reference
  121.     USBDeviceRef                    deviceRef;                // USB device reference
  122.     USBConfigurationDescriptorPtr     pFullConfigDescriptor;
  123.     USBConfigurationDescriptor        partialConfigDescriptor;
  124.     
  125.     USBInterfaceDescriptor            interfaceDescriptors[32];
  126.     USBInterfaceRef                    interfaceRefArray[32];
  127.     USBRqIndex                        interfaceCount;
  128.     USBRqIndex                        interfaceIndex;
  129.     
  130.     UInt32                            interfaceNumber;
  131.  
  132.     USBDeviceDescriptor             deviceDescriptor;        // copy for local reference
  133.     USBInterfaceDescriptorPtr        pInterfaceDescriptor;    // copy for local reference
  134.  
  135.     //    class driver async transactions
  136.     SInt32                            transDepth;                // don't nest transactions
  137.     SInt32                             retryCount;                // automatically retry transactions
  138.     UInt32                            currentState;            // State machine state
  139. };
  140. typedef struct StorageClassInfo    StorageClassInfo;
  141. typedef    StorageClassInfo         *StorageClassInfoPtr;
  142.  
  143.  
  144. struct StorageClassStatusPB {
  145.     USBPB                usbPB;
  146.     Boolean                busy;
  147.     StorageStatusPBPtr    userPBPtr;
  148.     UInt8                status[kStatusSize];
  149. };
  150. typedef struct StorageClassStatusPB    StorageClassStatusPB;
  151. typedef    StorageClassStatusPB         *StorageClassStatusPBPtr;
  152.  
  153.  
  154. struct StorageClassControlPB {
  155.     USBPB                usbPB;
  156.     Boolean                busy;
  157.     StorageControlPBPtr    userPBPtr;
  158. };
  159. typedef struct StorageClassControlPB    StorageClassControlPB;
  160. typedef    StorageClassControlPB             *StorageClassControlPBPtr;
  161.  
  162. // Device level
  163. // Device specific items will be part of another module later
  164.  
  165.  
  166.  
  167.  
  168. #endif //__STORAGECLASSDRIVERH__